package com.xsdl.singleton;

import java.util.concurrent.atomic.AtomicLong;

/*
 * 饿汉式单例模式资源占用
 * 懒汉式加锁太重影响性能
 * 双重检测式同时兼顾
 */
public class RIDGenerator {

    private final AtomicLong id = new AtomicLong(1L);

    // 高版本的 Java 已经在 JDK 内部实现中解决了重排序问题（解决的方法很简单，把对象 new 操作和初始化操作设计为原子操作，就自然能禁止重排序）
    private static RIDGenerator instance;

    public synchronized static RIDGenerator getInstance() {
        if (instance == null) {
            synchronized (RIDGenerator.class) {
                instance = new RIDGenerator();
            }
        }
        return instance;
    }

    public Long getNextId() {
        return id.getAndIncrement();
    }

}
